/**
  ******************************************************************************
  * @file    main.c 
  * @author  18408107475@163.com
  * @version v1.2
  * @date    2025-05-03
  * @brief   高精度光照检测系统（STM32F10x平台）
  * @details 
  * 硬件配置：
  * - MCU:    STM32F103ZET6 (72MHz)
  * - 传感器: 光照传感器模块（0-3.3V输出）
  * - 连接:   PF8(ADC3_IN6) + 3.3V基准电压源
  * - 串口:   USART1(调试输出) + USART3(可选数据转发)
  * 
  * 软件特性：
  * 1. 16次均值滤波（抗干扰）
  * 2. 自动电压/百分比转换
  * 3. 数据输出刷新率可调（当前2秒）
  * 4. 支持原始数据/工程单位双输出
  * 
  * 校准说明：
  * 1. 使用万用表测量实际VREF电压
  * 2. 修改VREF宏定义值
  * 3. 全量程测试时，需遮挡/强光照射传感器验证线性度
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"          // STM32标准外设库（V3.5.0）
#include "Delay.h"              // 精确延时库（基于SysTick）
#include "LIGHT_STD_Config.h"   // 光照传感器驱动（含DMA配置）
#include "USART1_Config.h"      // 调试串口配置（PA9/PA10）
#include "USART3_Config.h"      // 扩展串口配置（PB10/PB11）

/* 常量定义 ------------------------------------------------------------------*/
#define VREF            3.300f  // ADC参考电压（需实际校准，精度建议±1%）
#define REPORT_INTERVAL 2       // 数据上报间隔（秒）

/* 主程序 --------------------------------------------------------------------*/
int main(void)
{
    /* 硬件初始化（注意执行顺序） */
    LIGHT_STD_Config();         // 1. 先初始化ADC+DMA（需稳定电源）
    USART1_Config(115200);      // 2. 调试串口初始化
    USART3_Config(115200);      // 3. 扩展串口初始化（可选）
    
    /* 系统自检提示 */
    USART1_Printf("\r\n[System Boot]\r\n");
    USART1_Printf("Light Sensor @ ADC3_CH6\r\n");
    USART1_Printf("Sample Rate: %d seconds\r\n\n", REPORT_INTERVAL);

    /* 主监控循环 */
    while(1)
    {
        // 通过DMA直接获取最新AD值（无需软件触发）
        u16 raw_val = Light_Value[0];  // 12位有效数据（0-4095）
        
        /* 工程单位转换（浮点运算） */
        float voltage = raw_val * (VREF / 4095.0f);  // 电压转换公式
        float percent = raw_val * (100.0f / 4095.0f); // 百分比转换
        
        /* 串口数据报表输出 */
        USART1_Printf("+-----------------------+\r\n");
        USART1_Printf("| Light Sensor Data     |\r\n");
        USART1_Printf("+-----------+-----------+\r\n");
        USART1_Printf("| RAW       | %-9d |\r\n", raw_val);      // 原始值
        USART1_Printf("| Voltage   | %-6.3f V |\r\n", voltage);  // 保留3位小数
        USART1_Printf("| Percent   | %-6.1f %% |\r\n", percent); // 保留1位小数
        USART1_Printf("+-----------+-----------+\r\n\n");
        
        /* 延时控制（低功耗处理） */
        Delay_s(REPORT_INTERVAL);  // 可改为中断定时触发
    }
}

/************************ (C) COPYRIGHT 2025 STMicroelectronics *****END OF FILE****/
